/*
 * 
 *
 * 
 * [45] 输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个
 * 例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为321323
 * 
 * g++ test_cpp.cpp -ggdb -std=c++11 
 */

// @lc code=start

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class Solution
{

public:
  /**
   * @brief 题目45 输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个
   * 例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为321323
   * 
   * @param nums 输入vector
   * @return 打印能拼接出的所有数字中最小的一个
   */

  static bool cmp(int a, int b)
  {
    string A = to_string(a) + to_string(b);
    string B = to_string(b) + to_string(a);
    // A<B才返回1， 否则返回0不排序，因为已经成序
    return A < B;
  }

  string PrintMinNumber(vector<int> nums)
  {
    // 用自定义的排序方法从小到大进行排序
    sort(nums.begin(), nums.end(), cmp);

    string answer;
    for (int a : nums)
    {
      answer += to_string(a);
    }
    return answer;
  }
};

int main()
{
  class Solution solute;
  vector<int> arra1 = {1, 33, 5};
  vector<int> arra2 = {2, 11, 00};
  string sum1 = solute.PrintMinNumber(arra1);
  string sum2 = solute.PrintMinNumber(arra2);

  cout << "sum1: " << sum1 << endl;
  cout << "sum2: " << sum2 << endl;

  return 0;
}

// @lc code=end

